package com.crm.service.client;

import com.crm.pojo.ClientInfo;
import com.crm.pojo.Contact;
import com.crm.pojo.Userinfo;
import com.crm.vo.ClientGroupCountVo;
import com.crm.vo.Result;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.springframework.data.jpa.domain.Specification;
import org.springframework.web.multipart.MultipartFile;

public interface ClientInfoService {

    /**
     * 通过用户编号找到所有没有被删除的客户
     *
     * @param userId 用户编号
     * @return 客户列表
     */
    public List<ClientInfo> findAllNotDelByUserId(BigDecimal userId);


	/**
	 * 查找所有没有被删除得客户
	 * @return
	 */
	public List<ClientInfo> findAllNotDel();
	
	/**
	 * 查找所有客户
	 * @return
	 */
	public List<ClientInfo> findAll();
	
	
	/**
	 * 高级查询
	 * 根据clientInfo的任意属性查找客户，没有属性查找所有客户
	 * @param clientInfo
	 * @param curpage
	 * @param pagesize
	 * @param createStartTime
	 * @param createEndTime
	 * @return
	 */
	public List<ClientInfo> queryByClientInfo(ClientInfo clientInfo, int curpage, int pagesize , 
			Date createStartTime, Date createEndTime, Date updateStartTime, Date updateEndTime);
	
	
	/**
	 * 高级查询得出的客户数量
	 * 根据clientInfo的任意属性查找当前条件下得客户数量
	 * @param clientInfo
	 * @param createStartTime
	 * @param createEndTime
	 * @return
	 */
	public Long queryNumByClientInfo(ClientInfo clientInfo,  Date createStartTime, Date createEndTime, 
			Date updateStartTime, Date updateEndTime);
	
	/**
	 * 添加客户和联系人简要信息
	 * @param cname
	 * @param contactName
	 * @param source
	 * @param phone
	 * @param tel
	 * @param remarks
	 */
	public  Map addClientAndContract(String cname, String contactName, String source, String phone, String tel, String remarks,Date createDate,Date updateDate,BigDecimal userId);
	
	/**
	 * 删除客户
	 * 逻辑删除，将客户变为失效客户
	 * @param cid
	 * @return
	 */
	public Result delClient(Long cid);
	
	/**
	 * 根据客户查询该客户下的联系人
	 * @param cid
	 * @return
	 */
	public List<Contact> queryContactByCid(Long cid);
	
	/**
	 * 修改客户信息
	 * @param clientInfo
	 * @return
	 */
	public Result editClient(ClientInfo clientInfo);
	
	/**
	 * 查找所有用户
	 * @return
	 */
	public List<Userinfo> queryAllUser();

    /**
     * 获取所有的客户数据
     *
     * @return
     */
    public List<ClientInfo> getClientInfoList();
    
    /**
     * 根据用户id查找用户名
     * @param uId
     * @return
     */
    public String userName(Long uId);
    
    /**
     * 根据客户编号查找客户
     * @param cid
     * @return
     */
    public ClientInfo load(Long cid);
    
    /**
     * 通过excel导入客户信息
     * @param file
     * @return
     */
    public Result uploadExcelClinetInfo(MultipartFile file, String uploadWay);

    /**
     * 根据任意属性统计数据
     * @param factor
     * @return
     */
    public List<ClientGroupCountVo> selClientGroupCountVo(String factor);
}
